2
תגובות

בעיה בקוד ב OOP

פתח ArielTador ,
שלום,

כפי שאתם יודעים, בנושא הקודם שלי הזכרתי שאני רוצה להתחיל ללמוד OOP, ושתביאו לי מדריכים.

אחרי שמצאתי מדריך מספק, בהבחורים הנפלאים intval ו LighTo273,
אני נתקעתי בבעיה.
סתכלו על הקוד הבא:

<?php
class a {
    public $a = 2;

    public function a_method() {
        return  $this->a + 3;
    }
}

class b extends a{
    public $b = 2;

    public function b_method() {
        return  $this->b + a::a_method();
    }
}

$instance = new b();

print $instance->a_method();


אם יש לי ב class a פונקציה שמכילה בתוכה את הקוד הבא:
return  $this->a + 3;

ו התשובה של ה return היא 5,
אז איך יכול להיות אחרי class b, שיש לי את הקוד הבא:
$instance = new b();

print $instance->a_method();


ההדפסה שווה 5?
הרי אם בתוך הפונקצייה של class a, התשובה ב return שווה 5,
ופה עושים שב class b, אחרי ההורשה יהיה את הקוד הבא:
return  $this->b + a::a_method();

שזה בעצם b + התשובה של הפונקצייה ב class a,
והתשובה שווה 5?
הרי התרגיל פה הוא כזה:
5+2=7.

לא?

2 תשובות

avatar ענה intval ב 21 לדצמבר 2012 #

תפעיל הודעות על שגיאות.

return  $this->b + a::a_method(); // 2 + 3

// why 3 ?
// because  a::a_method() returns 3;
return  $this->a + 3; // 0 + 3

// why 0?
because $this->a = 0

//why? because $this == null
// why? because a::a_method() is a static call, not instance call.
// go read again about what STATIC is
// + enable error_reporting. PHP has reported an error for you, but you don't see it

avatar ענה ArielTador ב 21 לדצמבר 2012 #

אבל זה לא שגיאה, זה מה שכתוב ב webmaster, המדריך ל OOP שנתנת לי.